洛谷题解洛谷题解题解:P10296 [CCC 2024 S2] Heavy-Light Composition
xyx404
思路:
先看题判断其中重的字母和轻的字母是否满足交替出现,由此我们可以得出要先求出是奇数位的字母是重的,还是偶数位的字母重的。
注意,称一个字母是重的当且仅当它在字符串中出现了超过一次,是在字符串里出现了几次,而不是在它这次出现前出现了几次。
求出是奇数位的字母是重的,还是偶数位的字母重的,就好写了,只需要在判断的时候看现在历遍的字母的下标是不是需要重的,如果在不需要重的时候重了或在要重的地方没有重就输出 F
就可以了。
最后还有一个点,特判当字符串长度为二的时候,直接输出 F
就可以了。
整体思路就这么简单,但是坑多。
代码:
#include<bits/stdc++.h> using namespace std; long long T,N; string a; long long cnt[27]={0}; int main(){ cin>>T>>N; while(T--){ cin>>a; int jo=9; memset(cnt,0,sizeof(cnt)); for(int i=0;i<a.size();i++){ cnt[a[i]-'a']++; } if(N==2){ cout<<"F\n";continue; } else{ bool yes=1; for(int i=0;i<a.size();i++){ if(cnt[a[i]-'a']>=2)jo=i%2,yes=0; } if(yes){ cout<<"F\n"; continue; } if(jo==1){ bool y=1; for(int i=0;i<a.size();i++){ if(i%2==1){ if(cnt[a[i]-'a']<2){ y=0;break; } } else{ if(cnt[a[i]-'a']>=2){ y=0;break; } } } if(!y)cout<<"F\n"; else cout<<"T\n"; } else if(jo==0){ bool y=1; for(int i=0;i<a.size();i++){ if(i%2==0){ if(cnt[a[i]-'a']<2){ y=0;break; } } else{ if(cnt[a[i]-'a']>=2){ y=0;break; } } } if(!y)cout<<"F\n"; else cout<<"T\n"; } } } }
|
此代码已提交测试过。